/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo.persistencia;

import java.util.*;
import java.sql.*;
import modelo.ITienda;
import modelo.Tienda;
/**
 *
 * @author LEONIC
 */
public class TiendaDAO implements ITiendaDAO{

    public void create(ITienda tienda) {
        String sql = "insert into tiendas(id,direccion,cp,telefono,capacidad) values (?,?,?,?,?)";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setInt(1, tienda.getID());
            stm.setString(2, tienda.getDireccion());
            stm.setInt(3, tienda.getCP());
            stm.setInt(4, tienda.getTelefono());
            stm.setInt(5, tienda.getCapacidad());

            stm.execute();

        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            Persistencia.closeConnection();
        }
    }

    public ITienda read(int ID) {
        ITienda c = null;
        try {
            Statement stmt = Persistencia.createConnection().createStatement();
            ResultSet res = stmt.executeQuery("SELECT * FROM tiendas where id=" + ID);
            String direccion;
            int id,cp,telefono,capacidad;
            if (res.next()) {
                id = res.getInt("id");
                direccion = res.getString("direccion");
                cp = res.getInt("cp");
                telefono = res.getInt("telefono");
                capacidad = res.getInt("capacidad");
                c = new Tienda(id,direccion,cp,telefono,capacidad);
            }

        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            Persistencia.closeConnection();
        }
        return c;
    }

    public void update(ITienda tienda) {
        String sql=null;
          sql = "UPDATE tiendas SET direccion = ?, cp = ?, telefono = ?, capacidad = ? WHERE id = ?";

          try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setString(1, tienda.getDireccion());
            stm.setInt(2, tienda.getCP());
            stm.setInt(3, tienda.getTelefono());
            stm.setInt (4, tienda.getCapacidad());
            stm.setInt(5, tienda.getID());
            
            stm.execute();

        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            Persistencia.closeConnection();
        }
    }

    public void delete(ITienda tienda) {
        String sql = "DELETE FROM tiendas WHERE id = ?";
        try {
            PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
            stm.setInt(1, tienda.getID());

            stm.execute();

        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            Persistencia.closeConnection();
        }
    }

    public List<ITienda> list() {
        List<ITienda> tiendas = new ArrayList<ITienda>();

        try {
            Statement stmt = Persistencia.createConnection().createStatement();
            ResultSet res = stmt.executeQuery("SELECT * FROM tiendas ");
            String nombre;
            int id,cp,telefono, capacidad;
            String direccion;
            while (res.next()) {

                id = res.getInt("id");
                direccion = res.getString("direccion");
                cp = res.getInt("cp");
                capacidad = res.getInt("capacidad");
                telefono = res.getInt("telefono");
                tiendas.add(new Tienda(id, direccion, cp, telefono, capacidad));
            }

        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            Persistencia.closeConnection();
        }
        return tiendas;
    }

    public void AsignarTareas(ITienda tienda){

        List<String> dnis = new ArrayList<String>();
        int num=0;
        try {
            // SE BUSCAN LAS PERSONAS QUE PERTENECEN A LA TIENDA SOLICITADA
            Statement stmt = Persistencia.createConnection().createStatement();
            ResultSet res = stmt.executeQuery("SELECT dni FROM personas where cod_tienda=" + tienda.getID());
            String dni;
            while (res.next()) {
                dni = res.getString("dni");
                dnis.add(dni);
            }
            // SE CUENTAN EL NUMERO DE TAREAS
            stmt = Persistencia.createConnection().createStatement();
            res = stmt.executeQuery("SELECT count(*) FROM tarea");
            while (res.next()) {
                num = res.getInt("count(*)");
            }
            // SE DECLARA UN ITERADOR Y SE RECORRE LA LISTA DE EMPLEADOS DE LA TIENDA
            Iterator it= dnis.listIterator();
            while(it.hasNext()){
                //hacer un random de las tareas para sacar la tarea aleatoria
                Random r=new Random();
                int tareaaleatoria=r.nextInt(num-1)+1;
                System.out.println("ramdom: " + tareaaleatoria);
                //por cada elemento de la lista de dnis hacer un update con la tarea generada aleatoriamente
                String sql=null;
                sql = "UPDATE personas SET tarea = ? WHERE cod_tienda = ? and dni = ?";
                PreparedStatement stm = Persistencia.createConnection().prepareStatement(sql);
                stm.setString(1, Integer.toString(tareaaleatoria));
                stm.setInt(2, tienda.getID());
                stm.setString(3, it.next().toString());
                stm.execute();
            }

        } catch (SQLException e) {
            System.out.println(e);
        } finally {
            Persistencia.closeConnection();
        }


    }
}
